//
// Created by Dinger on 2021/9/18.
//

#ifndef FUNDAMENTALS_OF_COMPILING_CODE_H
#define FUNDAMENTALS_OF_COMPILING_CODE_H
#include"lexical_analysis.h"
#include"syntactic_analysis.h"
#include"semantic_analysis.h"
using namespace std;

/**
 * 代码类
 */
class Code {
private:
    LexicalAnalyzer *_lexicalAnalyzer;

    SyntacticAnalyzer *_syntacticAnalyzer;

    SemanticAnalyzer *_semanticAnalyzer;
    //代码串
    string _code;
    //单词集（词法分析阶段产物）
    vector<Word> _words;
    //分析树（语法分析产物）
    Tree _analyseTree;
    //文件名
    string _fileName;
    //行
    int _row;
    //列
    int _col;
    //是否正确
    bool _isRight;

    /**
     * 读取文件
     * @param fileName 文件名
     */
    void readFile(string fileName);

public:
    Code();

    Code(string fileName);

    string getCode() {
        return _code;
    }

    vector<Word> getWords() {
        return _words;
    }

    void setCode(string code) {
        _code = code;
    }

    void setWords(vector<Word> words) {
        _words = words;
    }

};
#endif //FUNDAMENTALS_OF_COMPILING_CODE_H
